1. Field of the Invention
This invention relates to data storage and more particularly relates to determining that correct data is returned from a data storage device in response to a read request.
2. Description of the Related Art
When data is transmitted, stored, transformed, etc., occasionally the data can become corrupted. Data corruption can be caused by transient factors such as voltage fluctuations, alpha particles, etc. or by more serious troubles such as component failures. Regardless of the cause, data corruption is a serious problem that requires protection measures to detect and correct data errors. Currently there are numerous methods to detect and correct data errors from simple parity checks to complex error correction code (“ECC”) that can detect and correct multiple bit errors.
Typical storage devices, such as hard disk drives, operate using low-level block storage commands. For early data storage devices, data was read in a storage device by transmitting a physical address to the storage device. The data is then retrieved using the physical address. Since there is little processing involved, the probability of retrieving the wrong data is slim. However, as storage devices become more sophisticated, the probability of retrieving the wrong data increases. Currently, many data storage devices include some type of mapping between a received address and an actual physical address where the data is stored. From the perspective of a file system, the file system may send a physical address where the file system understands the data to be located or where the data is to be stored. The data storage device may relocate the data to avoid bad blocks, to store the data more efficiently, etc. The data storage device treats the received physical address as a logical address. More sophisticated storage devices may allow storage of files and objects in addition to block storage. Storage of objects and files typically requires some type of logical-to-physical mapping to map logical addresses to physical addresses where the data is stored and this mapping may be more complex than the mapping in a typical random access device.
While data may be protected throughout processing and storage, increased complexity involving mapping or other manipulation of storage requests increases the probability that a storage request for a particular data segment will result in retrieval of data that is different than requested. What is needed is a way to improve reliability of data retrieval by ensuring that the data requested is the data retrieved.